Many computers execute a Basic Input/Output System (BIOS) program when turned on, or "booted-up." The BIOS program may, for example, establish how information is transferred between the computer's Operating System (OS) and attached devices such as a hard disk drive or a video card. In this way, the OS does not need to be configured based on the specific details, such as hardware addresses, of the attached devices. When device details change, only the BIOS program needs to be changed.
The BIOS program is typically stored in a BIOS memory, such as a flash memory integrated circuit. When the computer boots-up, a processor passes control to the BIOS program, which is located at a known location, or "address," in the BIOS memory.
A first manufacturer may design a circuit board with, among other things, one or more processors and a BIOS memory. The first manufacturer typically places a BIOS program at a pre-determined boot-up address in the BIOS memory. The processor is configured to always access that pre-determined address during boot-up, resulting in the first manufacturer's BIOS program being executed. A second manufacturer, however, may want to use the circuit board in a different way, and may have different requirements for the BIOS program.
In this case, the first BIOS program could be re-written in a way that supports the requirements of both manufacturers, but such a program may be difficult to write. In addition, the first manufacturer may not be able to complete the design and testing of the circuit board until the BIOS is re-written. Therefore, it may be desirable to write a second, separate, BIOS program that executes, in place of the first BIOS program, when the computer boots-up.
This could be done, for example, by storing the second BIOS program at the pre-determined boot-up address. This solution, however, requires that the first manufacturer have two different circuit boards, one with the first BIOS program and the other with the second BIOS program. Moreover, a circuit board built for one manufacturer could not be used by the other manufacturer unless the BIOS memory was physically replaced.
Another way of supporting different BIOS requirements is to have, for example, two BIOS programs stored in a single BIOS memory. FIG. 1 illustrates how two BIOS programs may be stored in a BIOS memory 100, as is known in the art. The first BIOS program comprises a first boot block 110 followed by one or more code blocks 112, or other types of information blocks such as parameter blocks. The second BIOS program comprises a second BIOS boot block 120 followed by one or more code blocks 122. As shown in FIG. 1, the first program starts at memory address "0000 0000" and the second program starts at memory address "1000 0000." Although an eight-bit memory address is used as an illustration, the memory address can, and usually does, contain more than eight bits.
When the processor boots-up, it may, for example, always try to access BIOS memory address "0000 0000." In this case the first BIOS program will execute. If, however, the circuit board can be manually configured such that the first bit of the memory address is always set to "1," the second BIOS program would execute instead. As is known in the art, the value of the first bit of the memory address may be manually set using a "jumper" wire that can be manually moved or installed by a manufacturer. In this way, the manufacturer can select which of the two BIOS programs will be executed. A single circuit board can therefore be used by either manufacturer, depending on the state of the jumper wire.
However, this requires that a manufacturer manually move or install the jumper wire on the circuit board, and this process can be labor intensive and expensive. Moreover, this method of selecting a BIOS program can lead to errors. For example, the manufacturer may forget to move a jumper, causing the circuit board to boot-up with the wrong BIOS program.